Niet van alle matrices kunnen de dimensies worden gewijzigd. Zelfs matrices waarvoor specifiek dynamische variabelen zijn gedeclareerd (en matrices binnen Variant-variabelen), zijn soms tijdelijk vergrendeld. Voor deze fout zijn de volgende oorzaken en oplossingen mogelijk:
FixedArr
ontvangen door SomeArr
in de procedure NextOne
, waarna wordt getracht de grootte van SomeArr
te wijzigen:
Sub FirstOne
Dim FixedArr(25) As Integer ' Create a fixed-size array and
NextOne FixedArr() ' pass it to another procedure.
End Sub
Sub NextOne(SomeArr() As Integer)
ReDim SomeArr(35) ' Error 10 occurs here.
. . .
End Sub
Maak de oorspronkelijke matrix dynamisch, en niet statisch, door deze te declareren met ReDim (bij declaratie binnen een procedure) of door deze te declareren zonder het aantal elementen op te geven (bij declaratie op moduleniveau).
ModArray
in de volgende programmacode een dynamische matrix op moduleniveau waarvan het 45ste element via verwijzing wordt doorgegeven aan de procedure Test
:
Dim ModArray () As Integer ' Create a module-level dynamic array.
. . .
Sub AliasError()
ReDim ModArray (1 To 73) As Integer
Test ModArray (45) ' Pass an element of the module-level
' array to the Test procedure.
End Sub
Sub Test(SomeInt As Integer)
ReDim ModArray (1 To 40) As Integer ' Error occurs here.
End Sub
Het is in dit geval niet nodig een element van de matrix op moduleniveau door te geven omdat deze zichtbaar is binnen alle procedures in de module. Wordt echter toch een element doorgegeven, dan wordt de matrix vergrendeld om te voorkomen dat het geheugen voor de verwijzingsparameter binnen de procedure wordt vrijgemaakt. Dat zou een onvoorspelbaar resultaat tot gevolg kunnen hebben wanneer de procedure terugkeert.
SomeArray = Array(9,8,7,6,5,4,3,2,1)
For Each X In SomeArray
SomeArray = 301 ' Causes error since array is locked.
Next X
Gebruik For...Next in plaats van een lus For Each...Next om herhalingen uit te voeren. Wanneer een lus For Each...Next wordt uitgevoerd op een matrix, kunt u de matrix wel lezen, maar niet ernaar schrijven.
Selecteer voor aanvullende informatie het desbetreffende item en druk op F1 (in Windows) of op HELP (op de Macintosh).